/*
 * DiskInfoData.java Created on 31 Январь 2006 г., 15:06 To change this template, choose Tools | Template Manager and
 * open the template in the editor.
 */

package org.dicr.sys.linux;

import java.io.*;

import org.dicr.util.data.*;

/**
 * Disk Info Data.
 * 
 * @author Igor A Tarasov &lt;linux@dicr.org&gt;
 * @version 060131
 */
public class DiskInfoData implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String partition;

	private String mountPoint;

	private long size;

	private long free;

	/**
	 * Constructor
	 * 
	 * @param diskPartition disk partition name
	 * @param diskMountPoint disk mount point
	 * @param theSize total size
	 * @param theFree free size
	 */
	protected DiskInfoData(String diskPartition, String diskMountPoint, long theSize, long theFree) {
		String thePartition = StringUtils.normalize(diskPartition);
		if (thePartition == null) throw new IllegalArgumentException("empty partition");
		if (theSize < 0) throw new IllegalArgumentException("size: " + theSize);
		if (theFree < 0 || theFree > theSize) throw new IllegalArgumentException("free: " + theFree);

		this.partition = thePartition;
		this.mountPoint = StringUtils.normalize(diskMountPoint);
		this.size = theSize;
		this.free = theFree;
	}

	/**
	 * Возвращает точку монтирования.
	 * 
	 * @return точка монтирования раздела (например "/var") или null.
	 */
	public String getMountPoint() {
		return this.mountPoint;
	}

	/**
	 * Возвращает раздел.
	 * 
	 * @return раздел диска (например "/dev/hdb2").
	 */
	public String getPartition() {
		return this.partition;
	}

	/**
	 * Возвращает размер диска.
	 * 
	 * @return размер раздела, байт.
	 */
	public long getSize() {
		return this.size;
	}

	/**
	 * Возвращает размер свободного места.
	 * 
	 * @return размер свободного места, байт.
	 */
	public long getFree() {
		return this.free;
	}

	/**
	 * Переводит в строку.
	 * 
	 * @return строковое представление.
	 */
	@Override
	public String toString() {
		return "DiskInfoData[" + this.partition + "]";
	}
}
